package com.ibeeking.found.cms.b.rest.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ibeeking.found.cms.service.common.bo.PageBaseBO;
import com.ibeeking.found.cms.service.common.bo.PageModuleBO;
import com.ibeeking.found.cms.service.common.constants.enums.PageCategoryEnum;
import com.ibeeking.found.cms.service.common.dos.PageModuleDO;
import com.ibeeking.found.cms.service.common.dos.PageModuleDraftDO;
import com.ibeeking.found.cms.service.common.param.PageModuleAllParam;
import com.ibeeking.found.cms.service.common.param.PageModuleParam;
import com.ibeeking.found.cms.service.common.query.*;
import com.ibeeking.found.cms.service.common.vo.PageModuleAllView;
import com.ibeeking.found.cms.service.common.vo.PageModuleVO;
import com.ibeeking.found.cms.service.common.vo.PageModuleView;
import com.ibeeking.found.common.entity.CurrentUser;

import java.util.List;


/**
 * IPageModuleService
 *
 * @Author ibeeking
 * @Date 2021-05-08 16:03
 */
public interface IPageModuleService {

    /***
     * 查询列表
     */
    List<PageModuleVO> list(PageModuleQuery pageModuleQuery);

    /***
     * 分页查询
     */
    Page<PageModuleVO> pageList(PageModulePageQuery pageModulePageQuery);

    /***
     * 保存
     */
    //PageModuleAllView saveDraft(PageModuleAllParam param, CurrentUser currentUser);
    /***
     * 保存
     */
    PageModuleAllView save(PageModuleAllParam param, CurrentUser currentUser);

    /***
     * 发布
     */
    Boolean publish(Long id);

    Boolean insertBatch(List<PageModuleDO> dooList);

    /***
     * 通过pageId查询
     */
    PageModuleAllView viewByPageId(Long pageId);

    PageModuleAllView viewByPageCategory(PageCategoryEnum pageCategoryEnum);

    /**
     * 通过页面类别查询
     *
     * @param pageBaseBO
     * @return
     */
    PageModuleAllView baseView(PageBaseBO pageBaseBO);

    /***
     * 修改状态
     */
    Boolean changeStatus(Long id, Integer status);
    /**
     * 添加
     *
     * @param paramList
     * @return
     */
    Boolean addList(List<PageModuleParam> paramList);;

    /***
     * 通过id删除
     */
    Boolean del(Long id);

    /***
     * 通过pageId删除
     */
    Boolean delByPageId(Long pageId);

    Boolean delDraftByPageId(Long pageId);
    /***
     * 通过pageId查询
     */
    List<PageModuleDO> selByPageId(Long pageId);
    List<PageModuleDraftDO> selDraftByPageId(Long pageId);

    PageModuleBO selById(Long id);

    PageModuleView pageModuleData(Long id);

    PageModuleView pageModuleData(PageModuleDataQuery query);

    PageModuleView pageModuleDataSelQuery(PageModuleDataSelQuery query);

    PageModuleView pageModuleDataBase(PageModuleView pageModuleView, String type, JSONObject dataField);

    /**
     * 组件子元素查询
     *
     * @param query
     * @return
     */
    List pageModuleChildData(PageModuleChildDataQuery query);

    List pageModuleChildDataSelQuery(PageModuleChildDataSelQuery query);

    List pageModuleChildDataBase(String childId, String type, JSONObject dataField);

    /**
     * 组件子内容分页
     *
     * @param query
     * @return
     */
    Page pageModuleChildDataPageList(PageModuleChildDataPageListQuery query);
}
